package NowCoder.Mathematics;
import java.util.*;

/**
 * 链接：https://www.nowcoder.com/questionTerminal/1d18c0841e64454cbc3afaea05e2f63c
 * 来源：牛客网
 *
 * 有假币
 * 时间限制：C/C++ 1秒，其他语言2秒空间限制：C/C++ 32M，其他语言64M
 * 居然有假币！ 现在猪肉涨了，但是农民的工资却不见涨啊，没钱怎么买猪肉啊。
 * nowcoder这就去买猪肉，结果找来的零钱中有假币！！！可惜nowcoder 一不小心把它混进了一堆真币里面去了。
 * 只知道假币的重量比真币的质量要轻，给你一个天平（天平两端能容纳无限个硬币），请用最快的时间把那个可恶的假币找出来。
 *
 * 输入描述:
 * 1≤n≤2^30,输入0结束程序。
 * 输出描述:
 * 最多要称几次一定能把那个假币找出来？
 *
 * 示例1
 * 输入
 * 3
 * 12
 * 0
 * 输出
 * 1
 * 3
 */
public class 有假币_编程_2_6_9 {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);

        while(sc.hasNext()){
            int n = sc.nextInt();

            if(n == 0){
                break;
            }

            System.out.println(mostTimes(n));
        }
    }

    public static int mostTimes(int n){
        if(n == 1){
            return 0;
        }
        if(n <= 3){
            return 1;
        }
        //当大于三，可以先分成三等分，先比较两个，如果相等，代表在没有比较的那一份上
        //如果不想等，则在轻的那一份上

        /**
         其中有一个规则，我们每次把n分成是3堆，
         如果n % 3 == 0,分成 n/3、 n/3、 n/3三堆， 剩下 n/3
         如果n % 3 == 1,分成 n/3、 n/3、1 + (n/3)三堆，最坏剩下 1 + (n/3)
         如果n % 3 == 2,分成 n/3、 1 + (n/3)、1 + (n/3)三堆，最坏剩下 1 + (n/3)
         */
        if(n % 3 == 0){
            return mostTimes(n / 3) + 1;
        }else{
            return mostTimes(n / 3 + 1) + 1;
        }
    }
}
